/*
 * Fichier     : <+NOM_de_FICHIER+>
 * Auteur      : <+MON_NOM+>
 * Version     : <+VERSION_DATE+>
 * Fonction    : <+FONCTION+>
 * Appel       : <+APPEL+>
 * Exit status : <+EXIT+>
 */

#include <stdio.h>
#include <stdlib.h>
#include <analex.h>

#include <gencod.h>

#include <string.h>

#define Z printf("ZOB\n");fflush(stdout)

int u_type; // type de l'unité lexicale
FILE* pFic; // fichier à lire

FILE* lstFic; // fichier LST
FILE* aux;
FILE* pfix;
FILE* pcod;
FILE* parret;

main(int argc, char *argv[])
{
	//test des arguments
	if(argc != 2){
		perror("ARGS");
		exit(1);
	}

	// ouverture du fichier en lecture
	pFic = fopen(argv[1], "r");
		
	// test d'erreur d'ouverture
	if(pFic==NULL) {
		perror("FOPEN");
		exit(2);
	}
	
	yyin = pFic; // source à analyser
	
	//Préparation des fichiers-résultats
	// LST
	char lstFicName[160];
	strcpy(lstFicName, argv[1]);
	strcat(lstFicName, ".lst");
	lstFic = fopen(lstFicName, "w");
	
	// AUX
	char auxFicName[160];
	strcpy(auxFicName, argv[1]);
	strcat(auxFicName, ".aux");
	aux = fopen(auxFicName, "w");	
	
	// POSTFIX
	char pfixFicName[160];
	strcpy(pfixFicName, argv[1]);
	strcat(pfixFicName, ".pfix");
	pfix = fopen(pfixFicName, "w");	

	// PCOD
	char pcodFicName[160];
    strcpy(pcodFicName, argv[1]);
    strcat(pcodFicName, ".pcod");
    pcod = fopen(pcodFicName, "w");
   
    // Fichier point d'arret
    char parretFicName[160];
    strcpy(parretFicName, argv[1]);
    strcat(parretFicName, ".parret");
    parret = fopen(parretFicName, "w");
    
    
   
	
	// tant qu'on peu lire des expressions
	/*while((u_type = yylex()) != 0){
		//affichage des informations
		printf("Lu: %s \t| Type: %d\n", u_lex, u_type);
	}*/
	codInit();
	
	if(program() == 1) {
		printf("OK\n\n");
		//symPrint(stdout);
		printf("\n\n");
		codPrint();
		printf("\n"); fprintf(pcod, "\n");
		symTable(stdout);symTable(pcod);
		symFree();
		exit(0);
	}
	
	//printf("Compilation échouée\n"); fprintf(pcod, "Compilation échouée\n");
	exit(0);
}
